﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.Entity;
using Biblioteca.Logica_Negocio.Domain_Model;

namespace Biblioteca.Acceso_a_Datos.Data_Mappers
{
    public class BibliotecaContext : DbContext
    {

        public BibliotecaContext()
            : base("name= BibliotecaDb")
        {
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            // Primary Keys  
            modelBuilder.Entity<Autor>().HasKey(c => c.Id);
            modelBuilder.Entity<Editorial>().HasKey(c => c.Id);
            modelBuilder.Entity<Ejemplar>().HasKey(c => c.Id);
            modelBuilder.Entity<Material>().HasKey(c => c.Id);
            modelBuilder.Entity<Tema>().HasKey(c => c.Id);
            modelBuilder.Entity<Socio>().HasKey(c => c.Id);
            modelBuilder.Entity<Reserva>().HasKey(c => c.Id);
            modelBuilder.Entity<Prestamo>().HasKey(c => c.Id);
            modelBuilder.Entity<CuentaSocio>().HasKey(c => c.Id);
            modelBuilder.Entity<TipoMaterial>().HasKey(c => c.Id);

            //material
            modelBuilder.Entity<Material>().HasMany<Reserva>(x => x.Reservas);
            modelBuilder.Entity<Material>().HasMany<Tema>(x => x.Temas);
            modelBuilder.Entity<Material>().HasMany<Autor>(x => x.Autores);
            modelBuilder.Entity<Material>().HasMany<Ejemplar>(x => x.Ejemplares);

            //ejemplar
            modelBuilder.Entity<Ejemplar>().HasMany<Prestamo>(x => x.Prestamos);

            //autor
            modelBuilder.Entity<Autor>().HasMany<Material>(x => x.Materiales);

            //tema
            modelBuilder.Entity<Tema>().HasMany<Material>(x => x.Materiales);

            //tipos_material
            modelBuilder.Entity<TipoMaterial>().HasMany<Material>(x => x.Materiales);

        }  

        public DbSet<Autor> Autores { get; set; }

        public DbSet<Editorial> Editoriales { get; set; }

        public DbSet<Ejemplar> Ejemplares { get; set; }

        public DbSet<Material> Materiales { get; set; }

        public DbSet<Tema> Temas { get; set; }

        public DbSet<Socio> Socios { get; set; }

        public DbSet<Reserva> Reservas { get; set; }

        public DbSet<Prestamo> Prestamos { get; set; }

        public DbSet<CuentaSocio> CuentaSocio { get; set; }

        public DbSet<TipoMaterial> TiposMaterial { get; set; }



    }
}
